unit PerfilFunc2RecordFr;

{$mode objfpc}{$H+}

interface

uses
  Classes, SysUtils, FileUtil, LResources, Forms, Controls, Graphics, Dialogs,
  StdCtrls, DBCtrls, ActnList, Buttons, Grids, MainRecordFr,
  ExtCtrls, ComCtrls, CheckLst, DBGrids;

type

  { TPerfilFunc2RecordFrame }

  TPerfilFunc2RecordFrame = class(TMainRecordFrame)
    FuncDBGrid: TDBGrid;
    ModuloCheckListBox: TCheckListBox;
    PerfilDBLookupListBox: TDBLookupListBox;
    GroupBox2: TGroupBox;
    GroupBox1: TGroupBox;
    GroupBox3: TGroupBox;
    GroupBox4: TGroupBox;
    GroupBox5: TGroupBox;
    Panel1: TPanel;
    FuncSpeedButton: TSpeedButton;
    FuncRemSpeedButton: TSpeedButton;
    procedure AlterarActionExecute(Sender: TObject);
    procedure CancelarActionExecute(Sender: TObject);
    procedure FecharActionExecute(Sender: TObject);
    procedure FuncRemSpeedButtonClick(Sender: TObject);
    procedure ModuloCheckListBoxClick(Sender: TObject);
    procedure ModuloCheckListBoxItemClick(Sender: TObject; Index: integer);
    procedure PerfilDBLookupListBoxClick(Sender: TObject);
    procedure FuncSpeedButtonClick(Sender: TObject);
    procedure ControlaBotoes(); override;
    procedure SalvarActionExecute(Sender: TObject);
  private
    { private declarations }
    Acao: string;
  public
    { public declarations }
  end;

implementation

uses
  PerfilFunc2DM, Initializator;

{ TPerfilFunc2RecordFrame }

//Busca os Módulos que o perfil possui acesso
procedure TPerfilFunc2RecordFrame.PerfilDBLookupListBoxClick(Sender: TObject);
var
  I: integer;
begin
  //Limpa Valores
  ModuloCheckListBox.Clear();
  PerfilFunc2Data.LimpaFuncionalidades();
  FuncSpeedButton.Enabled := False;
  FuncRemSpeedButton.Enabled := False;
  //Busca Valores
  PerfilFunc2Data.BuscaModuloPerfil(PerfilDBLookupListBox.KeyValue);
  for I := 1 to PerfilFunc2Data.AuxiliarZQuery.RecordCount do begin
    PerfilFunc2Data.AuxiliarZQuery.RecNo := I;
    if PerfilFunc2Data.AuxiliarZQuery.FieldByName('modulo').AsString = 'S' then begin
      ModuloCheckListBox.Items.Add(PerfilFunc2Data.AuxiliarZQuery.Fields[0].AsString);
      if PerfilFunc2Data.AuxiliarZQuery.FieldByName('acesso').AsString = 'S' then begin
        ModuloCheckListBox.Checked[ModuloCheckListBox.Count - 1] := True;
      end;
    end;
  end;
end;

procedure TPerfilFunc2RecordFrame.FuncSpeedButtonClick(Sender: TObject);
begin
  if ModuloCheckListBox.Checked[ModuloCheckListBox.ItemIndex] then begin
    if MessageDlg('Confirmação', 'Adicionar ' +
      FuncDBGrid.Columns.Items[1].Field.AsString + ' ?', mtConfirmation, mbYesNo, 0) =
      mrYes then begin
      if FuncDBGrid.Columns.Items[2].Field.AsString = 'N' then begin
        PerfilFunc2Data.InsereFuncionalidade(PerfilDBLookupListBox.KeyValue,
          FuncDBGrid.Columns.Items[0].Field.AsString,
          ModuloCheckListBox.GetSelectedText);
      end;
    end;
  end else begin
    ShowMessage('Marque primeiro o Módulo!');
  end;
end;

procedure TPerfilFunc2RecordFrame.ControlaBotoes();
var
  I: integer;
begin
  RecordDBNavigator.Enabled := False;
  for I := 0 to RecordActionList.ActionCount - 1 do begin
    TAction(RecordActionList.Actions[i]).Enabled := False;
  end;
  FecharAction.Enabled := True;
  if Acao = 'S' then begin
    AlterarAction.Enabled := True;
    SalvarAction.Enabled := False;
    FuncDBGrid.Enabled := False;
    ModuloCheckListBox.Enabled := False;
    CancelarAction.Enabled := False;
  end else if Acao = 'A' then begin
    AlterarAction.Enabled := False;
    SalvarAction.Enabled := True;
    CancelarAction.Enabled := True;
    FuncDBGrid.Enabled := True;
    ModuloCheckListBox.Enabled := True;
  end else begin
    AlterarAction.Enabled := True;
  end;
end;

procedure TPerfilFunc2RecordFrame.SalvarActionExecute(Sender: TObject);
begin
  Acao := 'S';
  PerfilFunc2Data.FuncZQuery.Connection.Commit();
  PerfilFunc2Data.ModificaAcessoBotoes();
  ControlaBotoes();
end;

//Busca as funcionalidades que pertence ao módulo e se o perfil possui acesso
procedure TPerfilFunc2RecordFrame.ModuloCheckListBoxClick(Sender: TObject);
begin
  FuncRemSpeedButton.Enabled := True;
  FuncSpeedButton.Enabled := True;
  PerfilFunc2Data.BuscaFuncionalidadePerfil(PerfilDBLookupListBox.KeyValue,
    ModuloCheckListBox.GetSelectedText);
end;

procedure TPerfilFunc2RecordFrame.FuncRemSpeedButtonClick(Sender: TObject);
begin
  if ModuloCheckListBox.Checked[ModuloCheckListBox.ItemIndex] then begin
    if MessageDlg('Confirmação', 'Remover acesso a ' +
      FuncDBGrid.Columns.Items[1].Field.AsString + ' ?', mtConfirmation, mbYesNo, 0) =
      mrYes then begin
      if FuncDBGrid.Columns.Items[2].Field.AsString = 'S' then begin
        PerfilFunc2Data.RemoveFuncionalidade(PerfilDBLookupListBox.KeyValue,
          FuncDBGrid.Columns.Items[0].Field.AsString,
          ModuloCheckListBox.GetSelectedText);
      end;
    end;
  end else begin
    ShowMessage('Marque primeiro o Módulo!');
  end;
end;

procedure TPerfilFunc2RecordFrame.AlterarActionExecute(Sender: TObject);
begin
  Acao := 'A';
  PerfilFunc2Data.FuncZQuery.Connection.StartTransaction();
  ControlaBotoes();
end;

procedure TPerfilFunc2RecordFrame.CancelarActionExecute(Sender: TObject);
begin
  Acao := 'S';
  PerfilFunc2Data.FuncZQuery.Connection.Rollback();
  ControlaBotoes();
end;

procedure TPerfilFunc2RecordFrame.FecharActionExecute(Sender: TObject);
begin
  TheControl.BackFrame();
end;


procedure TPerfilFunc2RecordFrame.ModuloCheckListBoxItemClick(Sender: TObject;
  Index: integer);
begin
  FuncRemSpeedButton.Enabled := True;
  FuncSpeedButton.Enabled := True;
  if ModuloCheckListBox.Checked[Index] = True then begin
    PerfilFunc2Data.InsereModuloFuncionalidade(
      PerfilDBLookupListBox.KeyValue, ModuloCheckListBox.GetSelectedText);
  end else begin
    PerfilFunc2Data.RemoveModuloFuncionalidade(
      PerfilDBLookupListBox.KeyValue, ModuloCheckListBox.GetSelectedText);
  end;
end;


initialization
  {$I perfilfunc2recordfr.lrs}

end.
